tree->root = NULL;
}
-gpointer
-gtk_rb_tree_find (GtkRbTree *tree,
- gpointer *out_before,
- gpointer *out_after,
- GtkRbTreeFindFunc find_func,
- gpointer user_data)
-{
- GtkRbNode *node, *before = NULL, *after = NULL;
- int cmp;
-
- if (tree->root == NULL)
- {
- if (out_before)
- *out_before = NULL;
- if (out_after)
- *out_after = NULL;
-
- return NULL;
- }
-
- node = tree->root;
- for (cmp = find_func (tree, NODE_TO_POINTER (node), user_data);
- cmp != 0;
- cmp = find_func (tree, NODE_TO_POINTER (node), user_data))
- {
- if (cmp < 0)
- {
- before = node;
- node = node->right;
- }
- else /* cmp > 0 */
- {
- after = node;
- node = node->left;
- }
- if (node == NULL)
- {
- if (out_before)
- *out_before = NODE_TO_POINTER (before);
- if (out_after)
- *out_after = NODE_TO_POINTER (after);
- return NULL;;
- }
- }
-
- if (out_before)
- *out_before = NODE_TO_POINTER (gtk_rb_node_get_previous (node));
- if (out_after)
- *out_after = NODE_TO_POINTER (gtk_rb_node_get_next (node));
-
- return NODE_TO_POINTER (node);
-}
gpointer node,
gpointer left,
gpointer right);
-typedef int (* GtkRbTreeFindFunc) (GtkRbTree *tree,
- gpointer node,
- gpointer user_data);
GtkRbTree * gtk_rb_tree_new_for_size (gsize element_size,
gsize augment_size,
gpointer node);
void gtk_rb_tree_remove_all (GtkRbTree *tree);
-gpointer gtk_rb_tree_find (GtkRbTree *tree,
- gpointer *out_before,
- gpointer *out_after,
- GtkRbTreeFindFunc find_func,
- gpointer user_data);
-
G_END_DECLS